package com.base.dao;

import java.io.Serializable;
import java.util.List;
import java.util.Map;


import com.util.PageBean;

/**
 * 文  件  名:IBaseDao.java
 * 创建日期:2012-8-28下午03:35:56
 * 作        者:guorui  东营东软电脑科技有限公司 版权所有
 * 说        明:
 */

@SuppressWarnings("rawtypes")
public interface IBaseDao {
	
	/** 
     * 根据传入的实体向数据库添加一条记录 
     * @param obj 
     * @throws DaoException 
     */  
	public void addObject(Object obj);

	/**
	 * 根据传入的实体向数据库添加一条记录,返回插入记录的主键
	 * @param obj
	 * @return String
	 */
	public String addObjectPK(Object obj);

	/**
	 * 根据传入的实体添加或修改数据库中一条记录
	 * @param obj
	 */
	public void addOrUpdate(Object obj);

	/** 
	 * 强制刷新Hibernate缓存提交数据更改操作 
	 */  
	public void dbFlush();

	/**
	 * 根据传入的实体与ID从数据库删除一条记录
	 * @param cls
	 * @param id
	 */
	public void deleteObject(Class cls, Serializable id);

	/**
	 * 根据传入的实体从数据库删除一条记录
	 * @param obj
	 */
	public void deleteObject(Object obj);

	/**
	 * 根据实体返回一个集合
	 * @param cls
	 * @return List
	 */
	public List findAllData(Class cls);

	/**
	 * 根据传入实体对象返回总记录数
	 * @param cls
	 * @return int
	 */
	public int findIntRowCount(Class cls);

	/**
	 * 根据传入HQL语句与条件查询记录总数
	 * @param hql
	 * @param paramMap
	 * @return int
	 */
	public int findIntRowCountByHqlName(String hql, String queryName, Map paramMap);

	/**
	 * 根据传入HQL语句返回一个集合
	 * @param hql
	 * @return List
	 */
	public List findListByHql(String hql);

	/**
	 * 根据传入HQL语句与条件查询集合
	 * @param hql
	 * @param paramMap
	 * @return List
	 */
	public List findListByHql(String hql, Map paramMap);

	/**
	 * 按传入HQL语句、条件、分页信息查询集合
	 * @param hql
	 * @param paramMap
	 * @param page
	 * @return List
	 */
	public List findListByHql(String hql, Map paramMap, PageBean page);

	/**
	 * 根据ID返回一个对象
	 * @param cls
	 * @param id
	 * @return Object
	 */
	public Object findObjectById(Class cls, Serializable id);

	/**
	 * 根据传入的实体修改数据库中一条记录
	 * @param obj
	 */
	public void updateObject(Object obj);

	/**
	 * 根据传入的实体修改数据库中一条记录,返回更新记录的主键
	 * @param obj
	 * @return String
	 */
	public String updateObjectPK(Object obj);

}
